package fr.greta.centreFormation.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import fr.greta.centreFormation.bean.Module;
import fr.greta.centreFormation.bean.UniteEnseignement;


public class UniteEnseignementHome {

	public static ArrayList<UniteEnseignement> selectAllUniteEnseignement(){

		String select = "SELECT * FROM unite_enseignement";
		ArrayList<UniteEnseignement> collectionuniteEnseignement = new ArrayList<UniteEnseignement>();

		try {
			Connection connection = Bdd.getConnection();
			PreparedStatement stmt = connection.prepareStatement(select);
			ResultSet result = stmt.executeQuery();

			while(result.next()){

				UniteEnseignement ue = new UniteEnseignement();
				ue.setIdUniteEnseignement(result.getInt(1));
				ue.setIntituleUniteEnseignement(result.getString(2));
				ue.setDescriptionUniteEnseignement(result.getString(3));

				ArrayList<Module> collectionModule = ModuleHome.selectAllModuleByIdUE(result.getInt(1));
				ue.setCollectionDeModules(collectionModule);

				collectionuniteEnseignement.add(ue);

			}
			return collectionuniteEnseignement;


		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

	}

	public static ArrayList<UniteEnseignement> selectAllUniteEnseignementByIdCursus(int idCursus){	

		String select = "SELECT * FROM unite_enseignement ue " +
				"INNER JOIN unite_enseignement_cursus uec ON ue.id_unite_enseignement = uec.id_unite_enseignement " +
				"WHERE uec.id_cursus = ?";

		ArrayList<UniteEnseignement> collectionuniteEnseignement = new ArrayList<UniteEnseignement>();

		try {
			Connection connection = Bdd.getConnection();
			PreparedStatement stmt = connection.prepareStatement(select);
			stmt.setInt(1, idCursus);
			ResultSet result = stmt.executeQuery();

			while(result.next()){

				UniteEnseignement ue = new UniteEnseignement();
				ue.setIdUniteEnseignement(result.getInt(1));
				ue.setIntituleUniteEnseignement(result.getString(2));
				ue.setDescriptionUniteEnseignement(result.getString(3));

				ArrayList<Module> collectionModule = ModuleHome.selectAllModuleByIdUE(result.getInt(1));
				ue.setCollectionDeModules(collectionModule);

				collectionuniteEnseignement.add(ue);

			}
			return collectionuniteEnseignement;


		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

	}

	public static UniteEnseignement selectUneUniteEnseignementById(int idUE){

		String select = "SELECT * FROM unite_enseignement WHERE id_unite_enseignement = ?";

		UniteEnseignement ue = new UniteEnseignement();

		PreparedStatement stmt;
		try {
			Connection connection = Bdd.getConnection();
			stmt = connection.prepareStatement(select);
			stmt.setInt(1, idUE);
			ResultSet result = stmt.executeQuery();

			result.next();

			ue.setIdUniteEnseignement(result.getInt(1));
			ue.setIntituleUniteEnseignement(result.getString(2));
			ue.setDescriptionUniteEnseignement(result.getString(3));
			ArrayList<Module> collectionModule = ModuleHome.selectAllModuleByIdUE(result.getInt(1));
			ue.setCollectionDeModules(collectionModule);

			return ue;


		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

	}

	public static int insertUneUniteEnseignement(UniteEnseignement uniteEnseignement){

		String insertUniteEnseignement = "INSERT INTO unite_enseignement (intitule_unite_enseignement, description_unite_enseignement)" +
				"VALUES (?, ?)";
		String insertModuleUniteEnseignment = "INSERT INTO module_unite_enseignement (id_module, id_unite_enseignement)" +
				"VALUES (?, ?)";

		int idUE = 0;

		try {
			Connection connection = Bdd.getConnection();
			PreparedStatement stmtUe = connection.prepareStatement(insertUniteEnseignement, Statement.RETURN_GENERATED_KEYS);
			stmtUe.setString(1, uniteEnseignement.getIntituleUniteEnseignement());
			stmtUe.setString(2, uniteEnseignement.getDescriptionUniteEnseignement());
			stmtUe.executeUpdate();

			ResultSet resultat = stmtUe.getGeneratedKeys();
			resultat.next();
			idUE = resultat.getInt(1);

			PreparedStatement stmtMUE = connection.prepareStatement(insertModuleUniteEnseignment);

			for(Module m : uniteEnseignement.getCollectionDeModules()){

				stmtMUE.setInt(1, m.getIdModule());
				stmtMUE.setInt(2, idUE);
				stmtMUE.executeUpdate();

			}


		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}
		return idUE;


	}

	public static boolean updateUneUniteEnseignement(UniteEnseignement uniteEnseignement){

		String update = "UPDATE unite_enseignement SET intitule_unite_enseignement = ?, description_unite_enseignement = ? WHERE id_unite_enseignement = ?";
		
		String insertModuleUniteEnseignment = "INSERT INTO module_unite_enseignement (id_module, id_unite_enseignement)" +
				"VALUES (?, ?)";

		try {
			Connection connection = Bdd.getConnection();
			PreparedStatement stmt = connection.prepareStatement(update);
			stmt.setString(1, uniteEnseignement.getIntituleUniteEnseignement());
			stmt.setString(2, uniteEnseignement.getDescriptionUniteEnseignement());
			stmt.setInt(3, uniteEnseignement.getIdUniteEnseignement());
			stmt.executeUpdate();

			deleteAllModuleDeUniteEnseignementByIdUniteEnseignement(uniteEnseignement.getIdUniteEnseignement());
			
			PreparedStatement stmtMUE = connection.prepareStatement(insertModuleUniteEnseignment);

			for(Module m : uniteEnseignement.getCollectionDeModules()){

				stmtMUE.setInt(1, m.getIdModule());
				stmtMUE.setInt(2, uniteEnseignement.getIdUniteEnseignement());
				stmtMUE.executeUpdate();

			}

			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}

	}
	
	public static boolean deleteAllModuleDeUniteEnseignementByIdUniteEnseignement(int idUE){
		
		String deleteModuleUniteEnseignement = "DELETE FROM module_unite_enseignement WHERE id_unite_enseignement = ?";
		
		try {
			
			Connection connection = Bdd.getConnection();
			PreparedStatement stmtDelete = connection.prepareStatement(deleteModuleUniteEnseignement);
			stmtDelete.setInt(1, idUE);
			stmtDelete.executeUpdate();
			
			return true;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
			return false;
		}
		
		
	}


	public static Boolean deleteUneUniteEnseignement(UniteEnseignement uniteEnseignement){
		
		String delete = "DELETE FROM unite_enseignement WHERE id_unite_enseignement = ?";
		
		try {
			
			deleteAllModuleDeUniteEnseignementByIdUniteEnseignement(uniteEnseignement.getIdUniteEnseignement());
			
			Connection connection = Bdd.getConnection();
			PreparedStatement stmt = connection.prepareStatement(delete);
			stmt.setInt(1, uniteEnseignement.getIdUniteEnseignement());
			stmt.executeUpdate();
			
			return true;
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
			return false;
		}
		
		
		

	}


}

